[broadway] Track and report last and future state
authorAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 12:36:30 +0000 (14:36 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 12:36:30 +0000 (14:36 +0200)
This fixes the drawing area demo in gtk-demo

gdk/broadway/gdkdevice-broadway.c
gdk/broadway/gdkdisplay-broadway.c
gdk/broadway/gdkdisplay-broadway.h
gdk/broadway/gdkeventsource.c

index 41fa169eb94e2af32cfb03776d59b2673c625955..11bfe53e00149f8a520087cfc02ccbe1b27e76c7 100644 (file)
@@ -175,9 +175,6 @@ gdk_broadway_device_query_state (GdkDevice        *device,
       *root_window = gdk_screen_get_root_window (screen);
     }
 
-  if (mask)
-    *mask = 0; /* TODO */
-
   if (broadway_display->output)
     {
       _gdk_broadway_display_consume_all_input (display);
@@ -190,6 +187,8 @@ gdk_broadway_device_query_state (GdkDevice        *device,
        *win_x = broadway_display->future_root_x - toplevel->x;
       if (win_y)
        *win_y = broadway_display->future_root_y - toplevel->y;
+      if (mask)
+       *mask = broadway_display->future_state;
       if (child_window)
        {
          if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
@@ -215,6 +214,8 @@ gdk_broadway_device_query_state (GdkDevice        *device,
     *win_x = device_root_y - toplevel->x;
   if (win_y)
     *win_y = device_root_y - toplevel->y;
+  if (mask)
+    *mask = broadway_display->last_state;
   if (child_window)
     {
       if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
index 1c1ee785872f20789cca70234b52ea55a39ca767..44cc326212f3982faaae4cc5c7a0dd0ce4ac0dae 100644 (file)
@@ -190,6 +190,7 @@ update_future_pointer_info (GdkBroadwayDisplay *broadway_display, BroadwayInputP
 {
   broadway_display->future_root_x = data->root_x;
   broadway_display->future_root_y = data->root_y;
+  broadway_display->future_state = data->state;
   broadway_display->future_mouse_in_toplevel = data->mouse_window_id;
 }
 
index 76d681015f4e91605aef69ce6c4860cb9e9ad608..d4a87d23f1c0284ae48591e21c2a682fd7fe1b32 100644 (file)
@@ -125,6 +125,7 @@ struct _GdkBroadwayDisplay
   GSource *event_source;
   GdkWindow *mouse_in_toplevel;
   int last_x, last_y; /* in root coords */
+  guint32 last_state;
   GdkWindow *real_mouse_in_toplevel; /* Not affected by grabs */
 
   /* Keyboard related information */
@@ -165,6 +166,7 @@ struct _GdkBroadwayDisplay
   /* Future data, from the currently queued events */
   int future_root_x;
   int future_root_y;
+  GdkModifierType future_state;
   int future_mouse_in_toplevel;
 };
 
index 0ff7b4d393651c108b0ea14331e0821e9e4ff435..2e2741635491fd8e411d2f34718af778c9fb5139 100644 (file)
@@ -103,6 +103,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
   case 'e': /* Enter */
     display_broadway->last_x = message->pointer.root_x;
     display_broadway->last_y = message->pointer.root_y;
+    display_broadway->last_state = message->pointer.state;
     display_broadway->real_mouse_in_toplevel =
       g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
 
@@ -139,6 +140,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
   case 'l': /* Leave */
     display_broadway->last_x = message->pointer.root_x;
     display_broadway->last_y = message->pointer.root_y;
+    display_broadway->last_state = message->pointer.state;
     display_broadway->real_mouse_in_toplevel =
       g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
 
@@ -174,6 +176,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
   case 'm': /* Mouse move */
     display_broadway->last_x = message->pointer.root_x;
     display_broadway->last_y = message->pointer.root_y;
+    display_broadway->last_state = message->pointer.state;
     display_broadway->real_mouse_in_toplevel =
       g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
 
@@ -199,6 +202,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
   case 'B':
     display_broadway->last_x = message->pointer.root_x;
     display_broadway->last_y = message->pointer.root_y;
+    display_broadway->last_state = message->pointer.state;
     display_broadway->real_mouse_in_toplevel =
       g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
 
@@ -224,6 +228,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
   case 's':
     display_broadway->last_x = message->pointer.root_x;
     display_broadway->last_y = message->pointer.root_y;
+    display_broadway->last_state = message->pointer.state;
     display_broadway->real_mouse_in_toplevel =
       g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));